// 操作和storage相关的东西
import storage from 'good-storage'
// 定义内部的字符砖一般 _XXX_ ,这样就可以防止冲突了
const SEARCH_KEY = '_search_'
const SEARCH_MAX_LENGTH = 15

// arr传入的数组，val传入的值, compare比较函数， maxLen最大值
function insertArray (arr, val, compare, maxLen) {
  // findIndex是es6的api，查找数组中是否有某个元素，
  const index = arr.findIndex(compare)
  // 如果第一条数组就是
  if (index === 0) {
    return
  }
  //  如果不是第一条，就删掉
  if (index > 0) {
    arr.splice(index, 1)
  }
  // 插入arr数组的第一条
  arr.unshift(val)
  if (maxLen && arr.length > maxLen) {
    // 超过了15条就抽出最后一条
    arr.pop()
  }
}

export function saveSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  insertArray(searches, query, (item) => {
    return item === query
  }, SEARCH_MAX_LENGTH)
  storage.set(SEARCH_KEY, searches)
  return searches
}

export function loadSearch () {
  return storage.get(SEARCH_KEY, [])
}

// 删除缓存中的东西
export function deleteSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  deleteFromArray(searches, (item) => {
    return item === query
  })
  storage.set(SEARCH_KEY, searches)
  return searches
}
// 删除的方法
function deleteFromArray (arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}

// 清空搜索结果
export function clearSearch () {
  storage.remove(SEARCH_KEY)
  return []
}
